home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / zmodem / src / flib.c < prev    next >
C/C++ Source or Header  |  1993-11-30  |  1KB  |  81 lines

  1.  
  2. #include    <stdio.h>
  3. #include    <stdlib.h>
  4. #include    <fslib.h>
  5.  
  6. #include    "flib.h"
  7.  
  8. static    FFPLST_T    *FfpTop = NULL;
  9.  
  10. #ifndef    MALLOC
  11. #    define    MALLOC    malloc
  12. #endif
  13. #ifndef    FREE
  14. #    define    FREE    free
  15. #endif
  16.  
  17. FILE    *FM_fopen(CONST char *fn, CONST char *md)
  18. {
  19.     FFPLST_T    *ffp;
  20.     FILE        *fp;
  21.  
  22.     fp = FS_fopen(fn,md);
  23.  
  24.     if ( fp == NULL )
  25.         return (NULL);
  26.  
  27.     if ( (ffp = MALLOC(sizeof(FFPLST_T))) == NULL )
  28.         return (fp);
  29.     ffp->next = ffp->prev = NULL;
  30.     ffp->fp   = fp;
  31.     if ( *md == 'w' || *md == 'a' )
  32.         ffp->md = 1;
  33.     else
  34.         ffp->md = 0;
  35.     ffp->drv  = ERR;
  36.     if ( FS_setFullPathName( ffp->fn, (char *)fn ) == NORMAL )
  37.         ffp->drv = toupper(ffp->fn[0]) - 'A';
  38.     if ( FfpTop == NULL )
  39.     {
  40.         FfpTop = ffp;
  41.     } else
  42.     {
  43.         ffp->next    = FfpTop;
  44.         FfpTop->prev = ffp;
  45.         FfpTop       = ffp;
  46.     }
  47.     return (fp);
  48. }
  49.  
  50. int        FM_fclose( FILE *fp )
  51. {
  52.     int            ret;
  53.     FFPLST_T    *ffp = FfpTop;
  54.  
  55.     while ( ffp )
  56.     {
  57.         if ( ffp->fp == fp )
  58.         {
  59.             if ( ffp->prev )        ffp->prev->next = ffp->next;
  60.             if ( ffp->next )        ffp->next->prev = ffp->prev;
  61.             if ( ffp == FfpTop )    FfpTop = ffp->next;
  62.             FREE( ffp );
  63.             break;
  64.         }
  65.         ffp = ffp->next;
  66.     }
  67.     ret = FS_fclose(fp);
  68.     return (ret);
  69. }
  70.  
  71. void    FM_all_fclose(void)
  72. {
  73.     while ( FfpTop )
  74.     {
  75.         FFPLST_T    *ffp;
  76.         ffp = FfpTop;
  77.         FM_fclose( ffp->fp );
  78.     }
  79. }
  80.  
  81.